package com.eagle.security.service;

import java.util.List;
import java.util.Map;

import org.springframework.security.access.prepost.PreAuthorize;

import com.eagle.security.entries.RoleGroup;

public interface RoleGroupManageService {
    /**
     * 新增
     * 
     * @param mo
     * @return
     */
    int saveRoleGroup(RoleGroup mo);

    /**
     * 修改
     * 
     * @param mo
     * @return
     */
    @PreAuthorize("hasRole('dd')")
    int modifyRoleGroup(RoleGroup mo);

    /**
     * 删除
     * 
     * @param id
     * @return
     */
    int deleteRoleGroupByName(String name);

    /**
     * find
     * 
     * @param id
     * @return
     */
    RoleGroup findRoleGroupByName(String name);

    /**
     * find
     * 
     * @param id
     * @return
     */
    Map<String, Object> findRoleGroupMapByName(String name);

    /**
     * 根据条件查找
     * 
     * @param mo
     * @param start
     * @param pageSize
     * @return
     */
    List<RoleGroup> findRoleGroupsByCond(RoleGroup mo, int page, int pageSize);

    /**
     * 根据条件查找
     * 
     * @param mo
     * @param start
     * @param pageSize
     * @return
     */
    List<Map<String, Object>> findRoleGroupMapsByCond(RoleGroup mo, int page, int pageSize);

    /**
     * 根据条件查找总数
     * 
     * @param mo
     * @return
     */
    int findRoleGroupCountByCond(RoleGroup mo);

    /**
     * 新增时，根据指定字段，检查数据库中是否已有记录
     * 
     * @param mo
     * @return
     */
    int checkExistWhenSaveRoleGroup(RoleGroup mo);

    /**
     * 分配角色组的权限
     * @param rolegroup_id
     * @param permission_keys
     * @return
     */
	int assignRolegroupPermission(String rolegroup_id, String[] permission_keys);

	/**
	 * 查找角色组的权限，以逗号分隔的字符串
	 * @param groupId
	 * @return
	 */
	String findRolegroupPermission(String groupId);
	
	/**
	 * 把用户添加到组 
	 * @param username
	 * @param groupId
	 */
	void addUserToGroupById(String username, String groupId );
	
	/**
	 * 从所有角色组中，删除此用户
	 * @param username
	 */
	void removeUserFromAllGroup(String username);
}
